package com.kaizeli.website.service;

import com.kaizeli.website.pojo.dto.OutputValueDTO;
import com.kaizeli.website.pojo.entity.OutputValueDO;
import com.kaizeli.website.pojo.vo.OutputValueVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 产值服务接口
 */
public interface OutputValueService {
    
    /**
     * 新增产值记录
     */
    Long save(OutputValueDO outputValueDO);
    
    /**
     * 更新产值记录
     */
    Boolean update(OutputValueDO outputValueDO);
    
    /**
     * 根据ID查询产值记录
     */
    OutputValueVO getById(Long id);
    
    /**
     * 根据ID删除产值记录
     */
    Boolean deleteById(Long id);
    
    /**
     * 根据员工ID查询产值记录
     */
    List<OutputValueVO> listByEmployee(Long employeeId);
    
    /**
     * 根据项目ID查询产值记录
     */
    List<OutputValueVO> listByProject(Long projectId);
    
    /**
     * 根据项目编号查询产值记录
     */
    List<OutputValueVO> listByProjectCode(String projectCode);
    
    /**
     * 根据员工ID和账期查询产值
     */
    List<OutputValueVO> listByEmployeeAndPeriod(Long employeeId, String accountPeriod);
    
    /**
     * 根据项目编号和账期查询产值
     */
    List<OutputValueVO> listByProjectAndPeriod(String projectCode, String accountPeriod);
    
    /**
     * 统计员工产值
     */
    BigDecimal sumOutputByEmployee(Long employeeId, String startPeriod, String endPeriod);
    
    /**
     * 统计项目产值
     */
    BigDecimal sumOutputByProject(Long projectId, String startPeriod, String endPeriod);
    
    /**
     * 获取产值统计
     */
    Map<String, Object> getOutputStatistics(String startPeriod, String endPeriod);
    
    /**
     * 获取产值分配
     */
    List<Map<String, Object>> getOutputDistribution(String projectCode, String accountPeriod);
}

